import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Solution341 implements Iterator<Integer> {

    public static class NestedInteger {

        Integer integer;
        List<NestedInteger> list;

        public NestedInteger(Integer k) {
            integer = k;
        }

        public NestedInteger(List<NestedInteger> l) {
            list = l;
        }

        public boolean isInteger() {
            return integer != null;
        }


        public Integer getInteger() {
            return integer;
        }


        public List<NestedInteger> getList() {
            return list;
        }
    }

    List<Integer> l=new ArrayList<>();
    int i=0;
    public Solution341(List<NestedInteger> nestedList) {
        dfs(nestedList);
    }

    public void dfs(List<NestedInteger> nestedIntegers){
        for (NestedInteger nestedInteger : nestedIntegers) {
            if (nestedInteger.isInteger()){
                l.add(nestedInteger.getInteger());
            }else{
                dfs(nestedInteger.getList());
            }
        }
    }

    @Override
    public Integer next() {
        return l.get(i++);
    }



    @Override
    public boolean hasNext() {
        return i!=l.size();
    }

    public static void main(String[] args) {
        List<NestedInteger> list=new ArrayList<>();
        list.add(new NestedInteger(1));list.add(new NestedInteger(1));
        List<NestedInteger> list2=new ArrayList<>();
        list2.add(new NestedInteger(1));list2.add(new NestedInteger(1));
        List<NestedInteger> l=new ArrayList<>();
        l.add(new NestedInteger(list));l.add(new NestedInteger(2));l.add(new NestedInteger(list2));
        Solution341 solution341=new Solution341(l);
        while (solution341.hasNext()){
            System.out.println(solution341.next());
        }
    }
}
